package com.jctrip.hotel.source.model.elong.resp.offline;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Author: zxy
 * @CreateTime: 2023-09-18 11:49
 * @Description:
 */

@Data
@ApiModel("查询酒店数据-返回体")
public class ElongQueryHotelRpResp implements Serializable {
    @ApiModelProperty("酒店列表")
    @JsonProperty(value = "Hotels")
    private List<Hotel> hotels;

    @Data
    @ApiModel("酒店信息")
    public static class Hotel implements Serializable {
        @ApiModelProperty("酒店编号")
        @JsonProperty(value = "HotelID")
        private String hotelId;

        @ApiModelProperty("供应商列表")
        @JsonProperty(value = "Suppliers")
        private List<Supplier> suppliers;

        @ApiModelProperty("产品列表")
        @JsonProperty(value = "RatePlans")
        private List<RatePlan> ratePlans;

        @ApiModelProperty("礼包")
        @JsonProperty(value = "Gifts")
        private List<Gift> gifts;

        @ApiModelProperty("礼包套餐")
        @JsonProperty(value = "GiftPackages")
        private List<GiftPackage> giftPackages;
    }

    @Data
    @ApiModel("供应商信息")
    public static class Supplier implements Serializable {
        @ApiModelProperty("酒店编码")
        @JsonProperty(value = "HotelCode")
        private String hotelCode;

        @ApiModelProperty("周末开始")
        @JsonProperty(value = "WeekendStart")
        private Integer weekendStart;

        @ApiModelProperty("周末结束")
        @JsonProperty(value = "WeekendEnd")
        private Integer weekendEnd;

        @ApiModelProperty("预订规则")
        @JsonProperty(value = "BookingRules")
        private List<BookingRule> bookingRules;

        @ApiModelProperty("房间对应关系")
        @JsonProperty(value = "Rooms")
        private List<Room> rooms;

        @ApiModelProperty("预付产品发票模式")
        @JsonProperty(value = "InvoiceMode")
        private String invoiceMode;

        @ApiModelProperty("酒店等级")
        @JsonProperty(value = "hotelLevel")
        private String hotelLevel;

        @ApiModelProperty("直连供应商ID")
        @JsonProperty(value = "SupplierId")
        private String dcSupplierId;

        @ApiModelProperty("供应商类型")
        @JsonProperty(value = "SupplierType")
        private String supplierType;
    }

    @Data
    @ApiModel("预订规则")
    public static class BookingRule implements Serializable {
        @ApiModelProperty("规则类型")
        @JsonProperty(value = "TypeCode")
        private String typeCode;

        @ApiModelProperty("关联的销售房型Id")
        @JsonProperty(value = "RoomTypeIds")
        private String roomTypeIds;

        @ApiModelProperty("描述")
        @JsonProperty(value = "Description")
        private String description;

        @ApiModelProperty("日期类型")
        @JsonProperty(value = "DateType")
        private String dateType;

        @ApiModelProperty("开始日期")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束日期")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("每天开始时间")
        @JsonProperty(value = "StartHour")
        @JsonFormat(pattern = "HH:mm", timezone = "GMT+8")
        private Date startHour;

        @ApiModelProperty("每天结束时间")
        @JsonProperty(value = "EndHour")
        @JsonFormat(pattern = "HH:mm", timezone = "GMT+8")
        private Date endHour;
    }

    @Data
    @ApiModel("担保规则")
    public static class GuaranteeRule implements Serializable {
        @ApiModelProperty("描述")
        @JsonProperty(value = "Description")
        private String description;

        @ApiModelProperty("日期类型")
        @JsonProperty(value = "DateType")
        private String dateType;

        @ApiModelProperty("开始日期")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束日期")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("周有效天数")
        @JsonProperty(value = "WeekSet")
        private String weekSet;

        @ApiModelProperty("是否到店时间担保")
        @JsonProperty(value = "IsTimeGuarantee")
        private Boolean isTimeGuarantee;

        @ApiModelProperty("到店担保开始时间")
        @JsonProperty(value = "StartTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date startTime;

        @ApiModelProperty("到店担保结束时间")
        @JsonProperty(value = "EndTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date endTime;

        @ApiModelProperty("到店担保的结束时间是否为第二天")
        @JsonProperty(value = "IsTomorrow")
        private Boolean isTomorrow;

        @ApiModelProperty("是否房量担保")
        @JsonProperty(value = "IsAmountGuarantee")
        private Boolean isAmountGuarantee;

        @ApiModelProperty("担保的房间数")
        @JsonProperty(value = "Amount")
        private Integer amount;

        @ApiModelProperty("担保类型")
        @JsonProperty(value = "GuaranteeType")
        private String guaranteeType;

        @ApiModelProperty("变更规则")
        @JsonProperty(value = "ChangeRule")
        private String changeRule;

        @ApiModelProperty("日期参数")
        @JsonProperty(value = "Day")
        private Date day;

        @ApiModelProperty("时间参数")
        @JsonProperty(value = "Time")
        private Date time;

        @ApiModelProperty("小时参数")
        @JsonProperty(value = "Hour")
        private Integer hour;
    }

    @Data
    @ApiModel("预付规则")
    public static class PrepayRule implements Serializable {
        @ApiModelProperty("规则编号")
        @JsonProperty(value = "PrepayRuleId")
        private String prepayRuleId;

        @ApiModelProperty("描述")
        @JsonProperty(value = "Description")
        private String description;

        @ApiModelProperty("日期类型")
        @JsonProperty(value = "DateType")
        private String dateType;

        @ApiModelProperty("开始日期")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束日期")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("周有效设置")
        @JsonProperty(value = "WeekSet")
        private String weekSet;

        @ApiModelProperty("变更规则")
        @JsonProperty(value = "ChangeRule")
        private String changeRule;

        @ApiModelProperty("第一阶段提前的几小时")
        @JsonProperty(value = "Hour")
        private Integer hour;

        @ApiModelProperty("第二阶段提前的几小时")
        @JsonProperty(value = "Hour2")
        private Integer hour2;

        @ApiModelProperty("具体取消时间日期部分")
        @JsonProperty(value = "DateNum")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date dateNum;

        @ApiModelProperty("具体取消时间小时部分")
        @JsonProperty(value = "Time")
        @JsonFormat(pattern = "HH:mm", timezone = "GMT+8")
        private Date time;

        @ApiModelProperty("在变更时间点前是否扣费")
        @JsonProperty(value = "DeductFeesBefore")
        private Integer deductFeesBefore;

        @ApiModelProperty("时间点前扣费的金额或比例")
        @JsonProperty(value = "DeductNumBefore")
        private BigDecimal deductNumBefore;

        @ApiModelProperty("时间点后扣款类型")
        @JsonProperty(value = "CashScaleFirstAfter")
        private String cashScaleFirstAfter;

        @ApiModelProperty("在变更时间点后是否扣费")
        @JsonProperty(value = "DeductFeesAfter")
        private Integer deductFeesAfter;

        @ApiModelProperty("时间点后扣费的金额或比例")
        @JsonProperty(value = "DeductNumAfter")
        private BigDecimal deductNumAfter;

        @ApiModelProperty("时间点前扣款类型")
        @JsonProperty(value = "CashScaleFirstBefore")
        private String cashScaleFirstBefore;
    }

    @Data
    @ApiModel("预付规则扩展")
    public static class PrepayRuleExtend extends PrepayRule {
        @ApiModelProperty("开始时间")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束时间")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("周有效设置")
        @JsonProperty(value = "WeekSet")
        private String weekSet;

        @ApiModelProperty("取消费用类型")
        @JsonProperty(value = "NoshowPenalty")
        private Integer noshowPenalty;

        @ApiModelProperty("取消规则列表")
        @JsonProperty(value = "PenaltyRuleList")
        private List<PenaltyWindowType> penaltyRuleList;

        @ApiModelProperty("规则类型")
        @JsonProperty(value = "subId")
        private Integer subId;
    }

    @Data
    @ApiModel("担保规则扩展")
    public static class GuaranteeRuleExtend extends PrepayRuleExtend {
        @ApiModelProperty("担保类型")
        @JsonProperty(value = "GuaranteeType")
        private Integer guaranteeType;

        @ApiModelProperty("超时担保时间")
        @JsonProperty(value = "GrtLatestCheckTime")
        private Integer grtLatestCheckTime;

        @ApiModelProperty("取消费用类型")
        @JsonProperty(value = "NoshowPenalty")
        private Integer noshowPenalty;

        @ApiModelProperty("取消规则列表")
        @JsonProperty(value = "PenaltyRuleList")
        private List<PenaltyWindowType> penaltyRuleList;

        @ApiModelProperty("规则类型")
        @JsonProperty(value = "SubId")
        private Integer subId;

        @ApiModelProperty("开始时间")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束时间")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("周有效设置")
        @JsonProperty(value = "WeekSet")
        private String weekSet;
    }

    @Data
    @ApiModel("取消规则窗口类型")
    public static class PenaltyWindowType implements Serializable{
        @ApiModelProperty("扣款类型")
        @JsonProperty(value = "PenaltyType")
        private Integer penaltyType;

        @ApiModelProperty("罚金")
        @JsonProperty(value = "PenaltyValue")
        private BigDecimal penaltyValue;

        @ApiModelProperty("规则时间分割起始点")
        @JsonProperty(value = "Deadline")
        private String deadline;
    }

    @Data
    @ApiModel("附加服务")
    public static class ValueAdd implements Serializable{
        @ApiModelProperty("valueAddId")
        @JsonProperty("ValueAddId")
        private String valueAddId;

        @ApiModelProperty("业务代码")
        @JsonProperty(value = "TypeCode")
        private String typeCode;

        @ApiModelProperty("描述")
        @JsonProperty(value = "Description")
        private String description;

        @ApiModelProperty("是否包含在房费中")
        @JsonProperty(value = "IsInclude")
        private Boolean isInclude;

        @ApiModelProperty("包含的份数")
        @JsonProperty(value = "Amount")
        private Integer amount;

        @ApiModelProperty("货币代码")
        @JsonProperty(value = "CurrencyCode")
        private String currencyCode;

        @ApiModelProperty("单价默认选项")
        @JsonProperty(value = "PriceOption")
        private String priceOption;

        @ApiModelProperty("单价")
        @JsonProperty(value = "Price")
        private BigDecimal price;

        @ApiModelProperty("是否单加")
        @JsonProperty(value = "IsExtAdd")
        private Boolean isExtAdd;

        @ApiModelProperty("单加单价默认选项")
        @JsonProperty(value = "ExtOption")
        private String extOption;

        @ApiModelProperty("单加单价")
        @JsonProperty(value = "ExtPrice")
        private BigDecimal extPrice;

        @ApiModelProperty("开始日期")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("结束日期")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("周有效设置")
        @JsonProperty(value = "WeekSet")
        private String weekSet;
    }

    @Data
    @ApiModel("产品促销规则")
    public static class DrrRule implements Serializable{
        @ApiModelProperty("关联的房型")
        @JsonProperty(value = "RoomTypeIds")
        private String roomTypeIds;

        @ApiModelProperty("产品促销规则类型代码")
        @JsonProperty(value = "TypeCode")
        private String typeCode;

        @ApiModelProperty("描述")
        @JsonProperty(value = "Description")
        private String description;

        @ApiModelProperty("日期类型")
        @JsonProperty(value = "DateType")
        private String dateType;

        @ApiModelProperty("促销生效开始日期")
        @JsonProperty(value = "StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @ApiModelProperty("促销生效结束日期")
        @JsonProperty(value = "EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @ApiModelProperty("提前几天")
        @JsonProperty(value = "DayNum")
        private Integer dayNum;

        @ApiModelProperty("连住几天")
        @JsonProperty(value = "CheckInNum")
        private Integer checkInNum;

        @ApiModelProperty("每连住几晚")
        @JsonProperty(value = "EveryCheckInNum")
        private Integer everyCheckInNum;

        @ApiModelProperty("最后几天")
        @JsonProperty(value = "LastDayNum")
        private Integer lastDayNum;

        @ApiModelProperty("第几晚及以后优惠")
        @JsonProperty(value = "WhichDayNum")
        private Integer whichDayNum;

        @ApiModelProperty("按金额或按比例来优惠")
        @JsonProperty(value = "CashScale")
        private String cashScale;

        @ApiModelProperty("按金额或比例优惠的数值")
        @JsonProperty(value = "DeductNum")
        private BigDecimal deductNum;

        @ApiModelProperty("星期有效设置")
        @JsonProperty(value = "WeekSet")
        private String weekSet;

        @ApiModelProperty("价格类型")
        @JsonProperty(value = "FeeType")
        private String feeType;
    }

    @Data
    @ApiModel("销售房型信息")
    public static class Room implements Serializable{
        @ApiModelProperty("销售房型编号")
        @JsonProperty(value = "RoomTypeId")
        private String roomTypeId;

        @ApiModelProperty("展示房型编号")
        @JsonProperty(value = "RoomId")
        private String roomId;

        @ApiModelProperty("销售房型可用状态")
        @JsonProperty(value = "Status")
        private Boolean status;
    }

    @Data
    @ApiModel("价格计划信息")
    public static class RatePlan implements Serializable{
        @JsonProperty("RatePlanId")
        private String ratePlanId;

        @JsonProperty("RatePlanName")
        private String ratePlanName;

        @JsonProperty("CustomerType")
        private String customerType;

        @JsonProperty("guestType")
        private String guestType;

        @JsonProperty("guestTypeExtendCh")
        private String guestTypeExtendCh;

        @JsonProperty("HotelCode")
        private String hotelCode;

        @JsonProperty("PaymentType")
        private String paymentType;

        @JsonProperty("RoomTypeIds")
        private String roomTypeIds;

        @JsonProperty("ProductTypes")
        private String productTypes;

        @JsonProperty("NeedIdNo")
        private Boolean needIdNo;

        @JsonProperty("Identification")
        private Integer identification;

        @JsonProperty("sellChannels")
        private String sellChannels;

        @JsonProperty("IsLimitTimeSale")
        private Boolean isLimitTimeSale;

        @JsonProperty("StartTime")
        @JsonFormat(pattern = "HH:mm:ss",timezone = "GMT+8")
        private Date startTime;

        @JsonProperty("EndTime")
        @JsonFormat(pattern = "HH:mm:ss",timezone = "GMT+8")
        private Date endTime;

        @JsonProperty("MinAmount")
        private Integer minAmount;

        @JsonProperty("MinDays")
        private Integer minDays;

        @JsonProperty("MaxDays")
        private Integer maxDays;

        @JsonProperty("MaxCheckinRooms")
        private Integer maxCheckinRooms;

        @JsonProperty("MinAdvHours")
        private Integer minAdvHours;

        @JsonProperty("MaxAdvHours")
        private Integer maxAdvHours;

        @JsonProperty("GuaranteeRules")
        private List<GuaranteeRule> guaranteeRules;

        @JsonProperty("PrepayRules")
        private List<PrepayRule> prepayRules;

        @JsonProperty("PrepayRuleExtends")
        private List<PrepayRuleExtend> prepayRuleExtends;

        @JsonProperty("GuaranteeRuleExtends")
        private List<GuaranteeRuleExtend> guaranteeRuleExtends;

        @JsonProperty("ValueAdds")
        private List<ValueAdd> valueAdds;

        @JsonProperty("Meals")
        private List<Meal> meals;

        @JsonProperty("DrrRules")
        private List<DrrRule> drrRules;

        @JsonProperty("Coupon")
        private Coupon coupon;

        @JsonProperty("ServiceTimePolicyInfo")
        private ServiceTimePolicyInfo serviceTimePolicyInfo;

        @JsonProperty("BookingChannels")
        private String bookingChannels;

        @JsonProperty("IsPriceLimitProduct")
        private Boolean isPriceLimitProduct;

        @JsonProperty("PriceLimitedType")
        private Integer priceLimitedType;

        @JsonProperty("CustomerLevel")
        private List<Integer> customerLevel;

        @JsonProperty("InvoiceMode")
        private String invoiceMode;

        @JsonProperty("CooperationType")
        private Integer cooperationType;

        @JsonProperty("EarliestToliveTime")
        private String earliestToliveTime;

        @JsonProperty("LatestToliveTime")
        private String latestToliveTime;

        @JsonProperty("StayTime")
        private String stayTime;

        @JsonProperty("TimeRushRuleList")
        private List<TimeRushRule> timeRushRuleList;

        @JsonProperty("XStayPeopleNum")
        private String xStayPeopleNum;

        @JsonProperty("XStaySex")
        private String xStaySex;

        @JsonProperty("XBedType")
        private String xBedType;

        @JsonProperty("XFloor")
        private String xFloor;

        @JsonProperty("XOrientation")
        private String xOrientation;

        @JsonProperty("XUserDefined")
        private String xUserDefined;

        @JsonProperty("SupportSpecialInvoice")
        private Boolean supportSpecialInvoice;
    }

    @Data
    @ApiModel("限时抢规则")
    public static class TimeRushRule implements Serializable{
        @JsonProperty("startDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("bookingStartTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date bookingStartTime;

        @JsonProperty("endDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("bookingEndTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date bookingEndTime;

        @JsonProperty("startTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date startTime;

        @JsonProperty("endTime")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date endTime;
    }

    @Data
    public static class ServiceTimePolicyInfo implements Serializable{
        @JsonProperty("start_date")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("end_date")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("week_effective")
        private List<Integer> weekEffective;

        @JsonProperty("start_time")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date startTime;

        @JsonProperty("end_time")
        @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
        private Date endTime;
    }

    @Data
    public static class Coupon implements Serializable{
        @JsonProperty("EffectiveDateFrom")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date effectiveDateFrom;

        @JsonProperty("EffectiveDateTo")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date effectiveDateTo;

        @JsonProperty("CouponRedemptionUpperLimit")
        private BigDecimal couponRedemptionUpperLimit;

        @JsonProperty("PromotionType")
        private Integer promotionType;

        @JsonProperty("RoomTypeID")
        private String roomTypeID;

        @JsonProperty("RatePlanID")
        private Integer ratePlanID;
    }

    @Data
    public static class GiftPackage implements Serializable{
        @JsonProperty("PkgProductId")
        private Long pkgProductId;

        @JsonProperty("PkgType")
        private Integer pkgType;

        @JsonProperty("Status")
        private Integer status;

        @JsonProperty("PkgProductName")
        private String pkgProductName;

        @JsonProperty("RuleDescriptionAdditional")
        private String ruleDescriptionAdditional;

        @JsonProperty("Pictures")
        private List<Picture> pictures;

        @JsonProperty("XProducts")
        private List<XProduct> xProducts;

        @JsonProperty("RelatedProduct")
        private RelatedProduct relatedProduct;
    }

    @Data
    public static class XProduct implements Serializable{
        @JsonProperty("XProductId")
        private Long xProductId;

        @JsonProperty("XProductName")
        private String xProductName;

        @JsonProperty("Status")
        private Integer status;

        @JsonProperty("TypeName")
        private String typeName;

        @JsonProperty("Quantity")
        private String quantity;

        @JsonProperty("ReceptionTimes")
        private String receptionTimes;

        @JsonProperty("Capacity")
        private String capacity;

        @JsonProperty("BookingPhone")
        private String bookingPhone;

        @JsonProperty("AppoIntegerPolicy")
        private String appoIntegerPolicy;
    }

    @Data
    public static class Picture implements Serializable{
        @JsonProperty("ImgIndex")
        private Integer imgIndex;

        @JsonProperty("ImgUrl")
        private String imgUrl;
    }

    @Data
    public static class RelatedProduct implements Serializable{
        @JsonProperty("RoomTypeId")
        private String roomTypeId;

        @JsonProperty("RatePlanId")
        private Integer ratePlanId;
    }

    @Data
    public static class Gift implements Serializable{
        @JsonProperty("GiftId")
        private Integer giftId;

        @JsonProperty("GiftDescription")
        private String giftDescription;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("DateType")
        private String dateType;

        @JsonProperty("WeekSet")
        private String weekSet;

        @JsonProperty("GiftContent")
        private String giftContent;

        @JsonProperty("GiftTypes")
        private String giftTypes;

        @JsonProperty("GiftInfos")
        private List<GiftInfo> giftInfos;

        @JsonProperty("HourNumber")
        private Integer hourNumber;

        @JsonProperty("HourType")
        private String hourType;

        @JsonProperty("WayOfGiving")
        private String wayOfGiving;

        @JsonProperty("WayOfGivingOther")
        private String wayOfGivingOther;

        @JsonProperty("GiftValue")
        private BigDecimal giftValue;
    }

    @Data
    public static class GiftInfo implements Serializable{
        @JsonProperty("GiftInfo")
        private Integer giftInfo;

        @JsonProperty("GiftSubInfos")
        private List<GiftSubInfo> giftSubInfos;
    }

    @Data
    public static class GiftSubInfo implements Serializable{
        @JsonProperty("SubInfo")
        private Integer subInfo;
    }

    @Data
    public static class HotelGiftProductRelation implements Serializable{
        @JsonProperty("RoomTypeIds")
        private String roomTypeIds;

        @JsonProperty("RatePlanId")
        private Integer ratePlanId;
    }

    @Data
    public static class HotelGiftDate implements Serializable{
        @JsonProperty("StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;
    }

    @Data
    public static class Meal implements Serializable{
        @JsonProperty("Type")
        private String type;

        @JsonProperty("IsInclude")
        private Boolean isInclude;

        @JsonProperty("NumberOfBreakfast")
        private Integer numberOfBreakfast;

        @JsonProperty("NumberOfLunch")
        private Integer numberOfLunch;

        @JsonProperty("NumberOfDinner")
        private Integer numberOfDinner;

        @JsonProperty("NumberOfTypeMeal")
        private Integer numberOfTypeMeal;

        @JsonProperty("NumberOfOptionalMeal")
        private Integer numberOfOptionalMeal;

        @JsonProperty("optionalMeals")
        private String optionalMeals;

        @JsonProperty("Description")
        private String description;

        @JsonProperty("DescribeOfBreakfast")
        private String describeOfBreakfast;

        @JsonProperty("DescribeOfLunch")
        private String describeOfLunch;

        @JsonProperty("DescribeOfDinner")
        private String describeOfDinner;

        @JsonProperty("StartDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startDate;

        @JsonProperty("EndDate")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endDate;

        @JsonProperty("WeekSet")
        private String weekSet;
    }
}